/*
 * @lc app=leetcode.cn id=131 lang=cpp
 *
 * [131] 分割回文串
 */

// @lc code=start
class Solution
{
private:
    vector<string> path;        // 保存现有回文子串
    vector<vector<string>> res; // 保存最后结果
    bool isbackstring(string s, int start, int end)
    {
        //区间为左闭右闭 为了好切割字符串
        while (start <= end)
        {
            if (s[start++] != s[end--])
            {
                return false;
            }
        }
        return true;
    }
    void backtracking(const string &s, int index)
    {
        //终止条件 分割线到达末尾
        if (index >= s.size())
        {
            res.push_back(path);
            return;
        }
        for (int i = index; i < s.size(); i++)
        {
            if (isbackstring(s, index, i))
            {
                //如果是回文串
                path.push_back(s.substr(index, i - index + 1)); //起始位置和长度
            }
            else
            {
                continue;
            }
            backtracking(s, i + 1);
            path.pop_back();
        }
    }

public:
    vector<vector<string>> partition(string s)
    {
        backtracking(s, 0);
        return res;
    }
};
// @lc code=end

